using System.Collections.Generic;
using CreditoAutorizado.Dados.Entidades;
using NHibernate;
using NHibernate.Criterion;

namespace CreditoAutorizado.CamadaAcessoDadosNH
{
    
    public class RepositorioDebito
    {
        public Debito Inserir(Debito debito)
        {
            GerenciadorBD.Instance.SessaoAtual().Save(debito);
            return debito;
        }

        public Debito Atualizar(Debito debito)
        {
            Debito tmpDebito = ObterPorId(debito.DebitoId);

            tmpDebito.DataEmissao = debito.DataEmissao;
            tmpDebito.DataPagamento = debito.DataPagamento;
            tmpDebito.Descricao = debito.Descricao;
            tmpDebito.Status = debito.Status;
            tmpDebito.Usuario = debito.Usuario;
            tmpDebito.ListaComentarios.Clear();
                       
            GerenciadorBD.Instance.SessaoAtual().Merge(tmpDebito);
            return tmpDebito;
        }

        public void Excluir(Debito debito)
        {
            GerenciadorBD.Instance.SessaoAtual().Delete(debito);
        }

        public IList<Debito> ObterTodos()
        {
            ICriteria criteria = GerenciadorBD.Instance.SessaoAtual().CreateCriteria(typeof(Debito));
            return criteria.List<Debito>() as List<Debito>;
        }

        public Debito ObterPorId(int id)
        {
            return GerenciadorBD.Instance.SessaoAtual().Get<Debito>(id);
        }
               
        public IList<Debito> ObterTodosPorUsuario(Usuario usuario)
        {
            ICriteria criteria = GerenciadorBD.Instance.SessaoAtual().CreateCriteria(typeof(Debito))
                    .Add(Restrictions.Eq("Usuario", usuario));

            return criteria.List<Debito>() as List<Debito>;
        }

        public IList<Debito> ObterTodosPorCliente(Cliente cliente)
        {
            ICriteria criteria = GerenciadorBD.Instance.SessaoAtual().CreateCriteria(typeof(Debito))
                    .Add(Restrictions.Eq("Cliente", cliente));

            return criteria.List<Debito>() as List<Debito>;
        }

        public IList<Debito> ObterTodosPorClienteEUsuario(Cliente cliente, Usuario usuario)
        {
            ICriteria criteria = GerenciadorBD.Instance.SessaoAtual().CreateCriteria(typeof(Debito))
                    .Add(Restrictions.Eq("Cliente", cliente)).Add(Restrictions.Eq("Cliente", cliente));

            return criteria.List<Debito>() as List<Debito>;
        }
    }
}